home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of MacTutor - S…e Code for Volumes 1 to 5
/
The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin
/
Source Code
/
#43 (Apr 89)
/
XCMDSource Code
/
ADSPHangUp.p
< prev
next >
Wrap
Text File
|
1989-02-07
|
2KB
|
110 lines
(****************************)
(* file: ADSPHangUp.p *)
(* *)
(* Disconnect an established*)
(* connection and deallocate*)
(* the data associated with*)
(* the connection. *)
(* *)
(* In: params[1] Name of *)
(* the entity to hangup on *)
(* *)
(* Out: error message, *)
(* empty if none. *)
(* *)
(* ------------------------ *)
(* By: Donald Koscheka *)
(* Date: 2-Mar-89 *)
(* All Rights Reserved *)
(* *)
(* ------------------------ *)
(****************************)
(*****************************
Build Sequence
pascal -o ADSPHangUp.p.o ADSPHangUp.p
link -m ENTRYPOINT -rt XCMD=1304 -sn Main=ADSPHangUp∂
ADSPHangUp.p.o∂
"{libraries}"Interface.o ∂
-o YourStackNameHere
******************************)
{$R-}
{$S ADSPHangUp}
UNIT DummyUnit;
(****************************)
INTERFACE
(****************************)
Uses MemTypes, QuickDraw, OSIntf,
ToolIntf, PackIntf, HyperXCmd,
AppleTalk, ADSP, adspxcmd;
Procedure EntryPoint( paramPtr : XCmdPtr );
(****************************)
IMPLEMENTATION
(****************************)
TYPE Str31 = String[31];
PROCEDURE ADSPHangUp( paramPtr: XCmdPtr ); FORWARD;
Procedure EntryPoint( paramPtr : XCmdPtr );
Begin
ADSPHangUp( paramPtr );
End;
Procedure ADSPHangUp( paramPtr : XCmdPtr );
VAR
adsp : ADSPPtr;
error : OSErr;
pb : DSPParamBlock;
eAddr : AddrBlock;
cb : CBPtr;
{$I XCmdGlue.inc }
{$I XCMDADSP.inc }
(****************************)
BEGIN
error := noErr;
IF ( paramPtr^.paramCount > 0 )
AND ( paramPtr^.params[1] <> NIL ) THEN
BEGIN
adsp := ADSPPtr(RetrieveData( 'GLOBALDSPDATA' ));
IF adsp <> NIL THEN
BEGIN
adsp^.checkPoint := RECEIVING;
{*** (1) Get the entity's address ***}
HLock( Handle(paramPtr^.params[1]) );
eAddr := NBPGetAddress( paramPtr^.params[1]^ );
cb := adsp^.ends;
{*** match the entity to the list ***}
IF LongInt(eAddr) <> 0 THEN
WHILE cb <> NIL DO
IF LongInt(cb^.adr ) = LongInt( eAddr ) THEN
BEGIN
error := DSPHangUp( cb );
cb := NIL;
END
ELSE
cb := cb^.next;
HUnlock( Handle(paramPtr^.params[1]) );
adsp^.checkPoint := CLOSE_OK;
END
END;
paramPtr^.returnValue := PasToZero( NumToStr( LongInt(error) ) );
END;
end.